class Solution {
public:
    string minWindow(string s, string t) {
		int hash1[128]={0};
		int kinds=0;
		for(auto e:t)
		{
			if(hash1[e]==0)kinds++;
			hash1[e]++;	
		}
		
		int hash2[128]={0};
		int minlen=INT_MAX,begin=-1;
		for(int left=0,right=0,count=0;right<s.size();right++)
		{
			char in=s[right];
			hash2[in]++;
			if(hash2[in]==hash1[in]) count++;
			
			while(count==kinds)
			{
				if(right-left+1<minlen)
				{
					minlen=right-left+1;
					begin=left;
				}
				char out=s[left++];
				if(hash2[out]==hash1[out])count--;
				hash2[out]--;
			}
		 } 
		if(begin==-1) return "";
		return s.substr(begin,minlen);
    }
};
